package rmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

import administracion.BarraManager;
import administracion.ComandaManager;
import administracion.EmpleadoManager;
import administracion.MesaManager;
import administracion.MozoManager;
import administracion.PlanProduccionManager;
import administracion.PlatoManager;
import administracion.ProductoManager;
import administracion.RecetaManager;
import administracion.SucursalManager;
import administracion.TareaManager;
import dto.BarraDTO;
import dto.CafeteriaDTO;
import dto.CajaDTO;
import dto.CocinaDTO;
import dto.ComandaDTO;
import dto.CompraNoVentaDTO;
import dto.CompraVentaDTO;
import dto.ElaboradoNoVentaDTO;
import dto.ElaboradoVentaDTO;
import dto.EmpleadoDTO;
import dto.MesaDTO;
import dto.MesaSimpleDTO;
import dto.MozoDTO;
import dto.PlanProduccionDTO;
import dto.PlatoDTO;
import dto.ProductoDTO;
import dto.RecetaDTO;
import dto.RubroCartaDTO;
import dto.SalonDTO;
import dto.SectorDTO;
import dto.SucursalDTO;
import dto.TareaDTO;
import entity.Empleado;
import interfaces.InterfazRemotaAdministracion;


public class RecursosRMI extends UnicastRemoteObject implements InterfazRemotaAdministracion {
	
	private static final long serialVersionUID = 1L;

	public RecursosRMI() throws RemoteException {
		
	}

	@Override
	public void altaSucursal(SucursalDTO s) throws RemoteException {
		SucursalManager.getInstancia().altaSucursal(s);
	}


	@Override
	public void altaProductoENV(ElaboradoNoVentaDTO p) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaProductoEV(ElaboradoVentaDTO p) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaProductoCV(CompraVentaDTO p) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaProductoCNV(CompraNoVentaDTO p) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<RecetaDTO> listarRecetas() throws RemoteException{
		RecetaManager rm= RecetaManager.getInstancia();
		List<RecetaDTO> recetas = rm.listarRecetas();
		return recetas;
	}

	@Override
	public void altaSalon(SucursalDTO sucursal, SalonDTO salon)
			throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaSector(SucursalDTO sucursal, SalonDTO salon, SectorDTO sector) throws RemoteException {
		sucursal.setSalon(salon);
//		salon.setSectores(sector);
	}

	@Override
	public void altaMesa(SucursalDTO sucursal, SalonDTO salon, SectorDTO sector, MesaDTO mesa) throws RemoteException {
		// TODO Auto-generated method stub
	}

	@Override
	public void altaBarra(SucursalDTO s, BarraDTO b) throws RemoteException {
		if(s != null && b != null){
			BarraManager.getInstancia().altaBarra(s, b);
		}else{
			return;
		}
		
	}

	@Override
	public void altaCafeteria(SucursalDTO s, CafeteriaDTO c)
			throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaCocina(SucursalDTO s, CocinaDTO c) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaCaja(SucursalDTO s, CajaDTO c) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void altaPlanProduccion(PlanProduccionDTO p) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<PlatoDTO> listarPlatos() throws RemoteException {
		PlatoManager pm= PlatoManager.getInstancia();
		List<PlatoDTO> platos = pm.listarPlatos();
		return platos;
	}

	@Override
	public List<RubroCartaDTO> listarRubros() throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<SucursalDTO> listarSucursales() throws RemoteException {
		List<SucursalDTO> sucursales = SucursalManager.getInstancia().listarSucursales();
		
		return sucursales;
	}

	@Override
	public List<TareaDTO> listarTareasActivas() throws RemoteException {
		List<TareaDTO> tareas = TareaManager.getInstancia().listarTareasActivas();
		
		return tareas;
	}

	@Override
	public List<SucursalDTO> calcularOcupacionSuc(List<SucursalDTO> sucursales) throws RemoteException {
		sucursales = SucursalManager.getInstancia().calcularOcupacionSuc(sucursales);
		
		return sucursales;
	}

	@Override
	public PlanProduccionDTO getPlanProduccion() throws RemoteException {
		PlanProduccionDTO plan;
		
		plan = PlanProduccionManager.getInstancia().getPlanProduccion();
		
		return plan;
	}

	@Override
	public List<ProductoDTO> listarProductos() throws RemoteException {
		List<ProductoDTO> productos = ProductoManager.getInstancia().listarProductos();
		
		return productos;
	}



	@Override
	public void AsignarMozoAMesa(MesaDTO mesaDto, MozoDTO mozoDto)
			throws RemoteException {
		// TODO Auto-generated method stub
		
	}


	

	@Override
	public void AsignarComandaAMesa(MesaDTO mesaDTO, ComandaDTO comandaDTO)
			throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void CerrarMesa(MesaDTO mesaDto) throws RemoteException {
		// TODO Auto-generated method stub
		
	}


	@Override
	public EmpleadoDTO validarUsuarioAdmin(String usuario, String password)
			throws RemoteException {
		EmpleadoDTO e = EmpleadoManager.getInstancia().validarUsuarioAdmin(usuario,password);
		
		return e;
	}

	@Override
	public boolean altaTarea(EmpleadoDTO e2, TareaDTO t) throws RemoteException {
		return PlanProduccionManager.getInstancia().altaTarea(e2, t);
		
	}

//Atencion a cliente
	@Override
	public List<MesaDTO> listarMesasPorSector(SectorDTO sector,
			int cantComensales) throws RemoteException {
		return MesaManager.getInstancia().listarMesasLibresPorSector(sector, cantComensales);
	}

	@Override
	public List<MesaDTO> armarMesaCompuesta(SectorDTO sector,
			int cantComensales) throws RemoteException {
		return MesaManager.getInstancia().armarMesaCompuesta(sector, cantComensales);
	}

	@Override
	public void AbrirMesa(MesaSimpleDTO mesaDto,MozoDTO mozoDto) throws RemoteException {
		MesaManager.getInstancia().abrirMesaSimpl(mesaDto,mozoDto);
		MozoManager.getInstancia().asociarMesaAMozo(mozoDto, mesaDto);
	}
	
	@Override
	public void AbrirMesaComp(List<MesaSimpleDTO> mesasDto, MozoDTO mozoDto)
			throws RemoteException {
		MesaDTO mesaCompDto = MesaManager.getInstancia().abrirMesaComp(mesasDto, mozoDto);
		MozoManager.getInstancia().asociarMesaAMozo(mozoDto, mesaCompDto);
		
	}

	@Override
	public List<MesaDTO> listarMesasPorMozo(MozoDTO mozo) throws RemoteException {
		return MozoManager.getInstancia().listarMesasPorMozo(mozo);
	}


	@Override
	public List<ProductoDTO> listarProductosElaborados() throws RemoteException {
		List<ProductoDTO> productos = ProductoManager.getInstancia().listarProductosElaborados();
		
		return productos;
	}

	@Override
	public void agregarItemAComanda(MesaDTO mesaDto, PlatoDTO platoDto, int cantidad) throws RemoteException {
		ComandaManager.getInstancia().adicionarItemAComanda(mesaDto.getComanda(), platoDto, cantidad);
	}

	@Override
	public void confirmarComanda(MesaDTO mesaDto) throws RemoteException {
		ComandaManager.getInstancia().confirmarComanda(mesaDto.getComanda());
	}

	@Override
	public EmpleadoDTO validarUsuario(String usuario, String password, String tipo)
			throws RemoteException {
		
		EmpleadoDTO e = EmpleadoManager.getInstancia().validarUsuario(usuario,password,tipo);
		return null;
	}

	
}
